import collections
import datetime
import time

from django.db.models import Count
from django.http import JsonResponse
from django.shortcuts import render

from web import models


def dashboard(request, project_id):
    # 问题数据处理
    status_dict = collections.OrderedDict()  # 生成有序字典，py3.6之前字典是无序的，这里是为了兼容
    for key, text in models.Issues.status_choices:
        status_dict[key] = {'text': text, 'count': 0}
    # 引入Count方法进行分组计数 [{'status': 3, 'count': 1},]
    issues_data = models.Issues.objects.filter(project_id=project_id).values('status').annotate(count=Count('id'))
    for item in issues_data:  # item = {'status': 3, 'count': 1}
        status_dict[item['status']]['count'] = item['count']

    # 项目成员
    user_list = models.ProjectUser.objects.filter(project_id=project_id).values('user_id', 'user__username')

    # 最近的10个问题
    top_ten = models.Issues.objects.filter(project_id=project_id, assign__isnull=False).order_by('-id')[0:10]

    context = {
        'status_dict': status_dict,
        'user_list': user_list,
        'top_ten_object': top_ten
    }
    return render(request, 'dashboard.html', context)


def char_info(request,project_id):
    """
    希望得到这个列表数据最终列表：
     [   时间戳          数量
       [1682144625010, 2],
       [1682231025000, 2],
       [1682318132777, 1],
     ]
     数据库生成这个列表1：
     [
        {"ctime':2023-4-24',"ct":1},
        {"ctime':2023-4-23',"ct":1},
     ]
     用循环生成这个字典1：
     {
      “2023-4-24”：[1682144625010, 1],
      “2023-4-23”：[1682231025000, 2],
      “2023-4-22”：[1682318132777, 0],
     }
     最后用循环用数据库的列表1的ctime数据当key去找到字典1的数量更新
     最后使用字典1.values()可以直接得到最终列表，再转成列表传给前端
    """
    # 生成字典1
    data_dict = {}
    today = datetime.datetime.now().date() # 获得今天的日期
    for i in range(0,30):
        data = today-datetime.timedelta(days=i) #获得每次相减后的时间(年月日时分秒)
        data_dict[data.strftime("%Y-%m-%d")] = [time.mktime(data.timetuple())*1000,0] #time.mktime(data.timetuple())*1000为获得毫秒时间戳，这里生成了字典1

    # 生成列表1:
    result = models.Issues.objects.filter(project_id=project_id,
                                          create_datetime__gte=today - datetime.timedelta(days=30)).extra( # extra(select={"ctime":1})为在查询出的列表中增加一列并赋值为1
        select={'ctime': "DATE_FORMAT(web_issues.create_datetime,'%%Y-%%m-%%d')"}).values('ctime').annotate(ct=Count('id')) # 这里对ctime进行分组统计数量得到列表1
    # 将字典的中的每个value里的ct修改:
    for item in result:
        data_dict[item['ctime']][1] = item["ct"]
    return JsonResponse({"status":True,"data":list(data_dict.values())}) # 字典不能被序列化，要转换成列表

